# -*- coding: UTF-8 -*-
from datetime import datetime

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel

fake_db = {}


class Item(BaseModel):
    title: str
    timestamp: datetime
    description: str = None


app = FastAPI()


@app.put("/items/{id}")
def update_item(id: str, item: Item):
    json_compatible_item_data = jsonable_encoder(item)
    # jsonable_encoder实际上由FastAPI在内部用于转换数据。但这在许多其他情况下很有用。
    fake_db[id] = json_compatible_item_data

    print(item.dict())
    # 传入的 datetime 是 python 格式，不是 json 格式
    #{'title': 'string', 'timestamp': datetime.datetime(2020, 5, 15, 3, 25, 31, 902000, tzinfo=datetime.timezone.utc), 'description': 'string'}

    print({**item.dict()})
    #{'title': 'string', 'timestamp': datetime.datetime(2020, 5, 15, 3, 25, 31, 902000, tzinfo=datetime.timezone.utc), 'description': 'string'}

    print(json_compatible_item_data)
    # 将 datetime 格式转换为 json 兼容的格式
    #{'title': 'string', 'timestamp': '2020-05-15T03:25:31.902000+00:00', 'description': 'string'}

    print(type(json_compatible_item_data))
    print(fake_db)
    print(type(fake_db))
    # return fake_db


if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)
